!!ZGameEditor overview

ZGameEditor is a game development system consisting of two main components:
* A Windows based integrated developer environment (IDE) for developing applications
* A runtime OpenGL based game engine

The focus of ZGameEditor is on making small and efficient game and multimedia applications. 

What you can do with ZGameEditor:
* Small retro style games like Space invaders or Pacman
* Screensavers
* Animations to use in other applications (see the About-box in ZGameEditor for an example)

Take a look at the [[SampleProjects | sample projects]] for an idea of what is possible.

%lframe% Path:/images/overview/pic1.png
[[<<]]
  
The applications you make with ZGameEditor can be as small as '''64 kilobytes''' or less, and become stand-alone programs that can be distributed royalty-free. 

There are a couple of limitations when making such small programs, the main one being this:
'''you cannot include external files like WAV/JPG or 3d-models'''. Instead all content in your application is defined procedurally. This means that it will be generated on-the-fly when the application is run, instead of being pre-calculated in external files.

The downside to using procedural content is that you have to define your graphics and sound effects using the ZGameEditor IDE instead of just importing finished files you have created in another application. Also, while procedural techniques are very good for making abstract style graphics and sound, it can be difficult to make exactly the result you want.

!!Component based development
Projects in ZGameEditor are '''component based'''. This means that you create applications by adding components to your project. There is a separate component for each functionality in ZGameEditor, for example the [[ComponentRef.KeyPress | KeyPress]] -component tests for user input from the keyboard.

%lframe% Path:/images/overview/pic2.png
[[<<]]

Components have properties that can be set to different values. There are two different kinds of properties in ZGameEditor:

#Value properties
#List properties

'''Value properties''' are simple values such as "Keys" for the KeyPress-component that controls which keys will be tested for keypresses.

'''List properties''' are lists that holds other components. For the KeyPress component there is a list property called OnPressed. This list accepts command-components that will be called when the KeyPress components detects a keypress.
    
!!Application structure
An ZGameEditor-application is controlled by a component called [[ComponentRef.ZApplication | ZApplication]]. When a new application is created in the editor, the ZApplication is already created as a root in the component tree.

Here is what this look like within the IDE:

%lframe% Path:/images/overview/pic3.jpg
[[<<]]

A moving graphical object is called a "Model" in ZGameEditor and is represented by the [[ComponentRef.Model | Model]]-component. The model have got value properties such as Position, Scale and Rotation which modifies its appearance on screen.

Both ZApplication and Model have got list properties. The two most important are:
#OnRender
#OnUpdate

OnRender: Components in this list are called when the model or application is being rendered on screen. For the model this can be commands for rendering a 3d-mesh. The application can use this list for displaying text such as "player score" in a game.

OnUpdate: Components in this list are called between every rendered frame. This is used for application logic and updating model movement.

%lframe% Path:/images/overview/pic4.png
[[<<]]
    
!!Scripting language
One of the design philosophies behind ZGameEditor is that users should be able to create applications without requiring lots of programming-knowledge. 

Simple applications can be created without any programming. Just add components and set the properties to fit your needs. For more advanced applications and fine-tuning ZGameEditor uses a C-style scripting language. This is mainly used with the [[ComponentRef.ZExpression | ZExpression]] - component. More info about the scripting can be found here: [[WritingExpressions | "Scripting syntax"]].

\\
\\

This is the end of the ZGameEditor overview. For more information move on to [[Tutorial1 | "Tutorial 1"]] which is a guide for how to use the editor.